package smap;

import BD.AlunoBD;
import BD.AtividadesBD;
import BD.BancaBD;
import BD.BancaProfessorBD;
import BD.DefesaBD;
import BD.ExameBD;
import ConexaoBackupBD.MetodosVerificacaoBD;
import DAO.AtividadesDAO;
import DAO.BancaDAO;
import DAO.BancaProfessorDAO;
import DAO.DefesaDAO;
import DAO.TeseDAO;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class TelaDefesa extends javax.swing.JDialog {
    
    private int codTeseRecebido; //receber o código da tese da tela anterior
    
    public int getCodTeseRecebido() {
        return codTeseRecebido;
    }

    public void setCodTeseRecebido(int codTeseRecebido) {
        this.codTeseRecebido = codTeseRecebido;
    }

    public TelaDefesa(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        tblDefesa = new javax.swing.JTable();
        jPanel2 = new javax.swing.JPanel();
        btnVoltar = new javax.swing.JButton();
        btnCadastrar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        btnAlterar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Exame de defesa");
        setResizable(false);

        tblDefesa.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "cod_defesa", "Data", "cod_banca", "cod_tese", "Situação"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblDefesa.getTableHeader().setReorderingAllowed(false);
        jScrollPane1.setViewportView(tblDefesa);
        tblDefesa.getColumnModel().getColumn(0).setMinWidth(0);
        tblDefesa.getColumnModel().getColumn(0).setPreferredWidth(0);
        tblDefesa.getColumnModel().getColumn(0).setMaxWidth(0);
        tblDefesa.getColumnModel().getColumn(1).setMinWidth(100);
        tblDefesa.getColumnModel().getColumn(1).setPreferredWidth(100);
        tblDefesa.getColumnModel().getColumn(1).setMaxWidth(120);
        tblDefesa.getColumnModel().getColumn(2).setMinWidth(0);
        tblDefesa.getColumnModel().getColumn(2).setPreferredWidth(0);
        tblDefesa.getColumnModel().getColumn(2).setMaxWidth(0);
        tblDefesa.getColumnModel().getColumn(3).setMinWidth(0);
        tblDefesa.getColumnModel().getColumn(3).setPreferredWidth(0);
        tblDefesa.getColumnModel().getColumn(3).setMaxWidth(0);

        jPanel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(192, 192, 192)));

        btnVoltar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/voltar-icon.png"))); // NOI18N
        btnVoltar.setText("Voltar");
        btnVoltar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnVoltarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGap(139, 139, 139)
                .addComponent(btnVoltar, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnVoltar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        btnCadastrar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/add-icon.png"))); // NOI18N
        btnCadastrar.setText("Cadastrar");
        btnCadastrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCadastrarActionPerformed(evt);
            }
        });

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/delete-icon.png"))); // NOI18N
        btnExcluir.setText("Excluir");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        btnAlterar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Imagens/alterar-icon.png"))); // NOI18N
        btnAlterar.setText("Alterar");
        btnAlterar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAlterarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnCadastrar, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnExcluir, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnAlterar, javax.swing.GroupLayout.PREFERRED_SIZE, 110, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnCadastrar)
                    .addComponent(btnExcluir)
                    .addComponent(btnAlterar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        java.awt.Dimension dialogSize = getSize();
        setLocation((screenSize.width-dialogSize.width)/2,(screenSize.height-dialogSize.height)/2);
    }// </editor-fold>//GEN-END:initComponents

    private void btnVoltarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnVoltarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnVoltarActionPerformed

    private void btnCadastrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCadastrarActionPerformed
        DefesaDAO defDao = new DefesaDAO();
                
        //Instancia de defesa
        ExameBD def = new DefesaBD();
        
        if(defDao.verificarSituacaoAntesDeCadastrar(codTeseRecebido)){
            TelaCadExame telcadbanca = new TelaCadExame(null, true);
            telcadbanca.carregarComboProfessor();
            telcadbanca.setarInstanciaExame(def);
            telcadbanca.setCodTeseRecebido(codTeseRecebido);
            telcadbanca.setCadastrar(true);//true para cadastro
            telcadbanca.setVisible(true);
            carregarTabela(String.valueOf(codTeseRecebido));
        }
    }//GEN-LAST:event_btnCadastrarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        int linha = tblDefesa.getSelectedRow();
        
        if(linha != -1){           
            Object[] opcoes = { "Sim", "Não" };
                //Obtem os dados de acordo com a linha ao qual foi selecionada.

            Integer resposta =JOptionPane.showOptionDialog(null,"Deseja excluir este exame ?", 
                    "Exclusão",JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE, null,
                    opcoes, opcoes[1]);

            // Verifica Resposta do Usuário
            if(resposta == JOptionPane.OK_OPTION){
                ExameBD exBD = new ExameBD();
                exBD.setCodigo((Integer)tblDefesa.getValueAt(linha, 0));
                exBD.setCod_banca((Integer)tblDefesa.getValueAt(linha, 2));
                
                //instancias para chamar o método de exclusão
                DefesaDAO defDao = new DefesaDAO();
                BancaProfessorDAO banproDao = new BancaProfessorDAO();
                BancaDAO banDao = new BancaDAO();
                
                if(defDao.excluir(exBD)){ // exclui qualificação
                    if(banproDao.excluiBancaProfessor(exBD.getCod_banca())){ // exclui relação bancaprofessor
                        if(banDao.excluirBanca(exBD.getCod_banca())){
                            
                            AtividadesDAO atDao = new AtividadesDAO();
                            AtividadesBD atBD = new AtividadesBD();
                            TeseDAO tesDAO = new TeseDAO();
                            
                            AlunoBD aluno = new AlunoBD();
                            aluno = tesDAO.buscarRaNome(codTeseRecebido);
                            
                            List<AtividadesBD> lista = atDao.filtro("tituloatividade", "Apresentação de defesa da tese do aluno " + aluno.getNome() 
                                       + ", " + aluno.getRa() + ".", "Atividades");
                            atDao.excluirAtividade(lista.get(0).getCodigoAtividade());
                            
                            
                            JOptionPane.showMessageDialog(null, "Exclusão realizada com sucesso.", 
                                    "Exclusão", JOptionPane.INFORMATION_MESSAGE);
                        }
                    }                   
                }
                carregarTabela(String.valueOf(codTeseRecebido));
            }
            else{
                JOptionPane.showMessageDialog(null,"Exclusão cancelada", "Exclusão", JOptionPane.INFORMATION_MESSAGE);
            }      
        }
        else{
            JOptionPane.showMessageDialog(null, "Selecione um exame de defesa para excluir.", 
                    "Selecione o exame", JOptionPane.INFORMATION_MESSAGE);
        }       
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAlterarActionPerformed
        MetodosVerificacaoBD metBD = new MetodosVerificacaoBD();
        BancaProfessorDAO banProDao = new BancaProfessorDAO();
        BancaDAO banDao = new BancaDAO();
        List<BancaProfessorBD> listaBanPro = new ArrayList<BancaProfessorBD>();
        
        int linha = tblDefesa.getSelectedRow();
        
        if(linha!= -1){
            TelaCadExame telExa = new TelaCadExame(null, true);
            telExa.carregarComboProfessor();
                        
            ExameBD ex = new DefesaBD();
            ex.setCodigo((Integer)tblDefesa.getValueAt(linha, 0));
            ex.setData(metBD.stringToDate((String)tblDefesa.getValueAt(linha, 1)));
            ex.setCod_banca((Integer)tblDefesa.getValueAt(linha, 2));
            ex.setCod_tese(((Integer)tblDefesa.getValueAt(linha, 3)));
            ex.setSituacao((String)tblDefesa.getValueAt(linha, 4));            
            telExa.setarInstanciaExame(ex);
            
            //recupera a banca a partir do codigo
            BancaBD ban = new BancaBD();
            ban = banDao.recuperarBanca(ex.getCod_banca());
            
            //carrega a lista professores relacionados a banca.
            listaBanPro = banProDao.listarBancaProfessor(ex.getCod_banca());
            
            telExa.recebeObjetos(ban, listaBanPro, ex); //envia objetos para a telaCadExame
            telExa.setCodTeseRecebido(codTeseRecebido);
            telExa.setCadastrar(false); //false para alterar.
            telExa.setTitle("Alterar exame de avaliação");
            telExa.setVisible(true); //abre a tela
            
            //recarregar a tabela
            carregarTabela(String.valueOf(codTeseRecebido));
            
        }else{
            JOptionPane.showMessageDialog(null, "Selecione um exame de qualificação para alterar.", 
                    "Selecione o exame", JOptionPane.INFORMATION_MESSAGE);
        }        
    }//GEN-LAST:event_btnAlterarActionPerformed
    
    /*Cria uma lista com todos os códigos da qualificação*/
    private List<Integer> capturarCodigoDefesa(){
        List<Integer> lista = new ArrayList<Integer>();
        
        //Define o Modelo da JTable
        DefaultTableModel tbm = (DefaultTableModel)tblDefesa.getModel();         
        
        //varre a tabela
        for(int i = 0; i < tbm.getRowCount(); i++){ 
            //linha i coluna 1 (cod_def..) escondido na jtable
            lista.add((Integer)tblDefesa.getValueAt(i, 0));
        }
        
        return lista;
    }
    
    /** Carregar jtable com os exames de defesa de acordo com o código da tese. */
    public void carregarTabela(String cod_tese){
        DefesaDAO defDao = new DefesaDAO();
        List<ExameBD> listaQualficacao = new ArrayList<ExameBD>(); 
        
        //realiza a pesquisa pelo cod da tese
        listaQualficacao = defDao.filtro("cod_tese", cod_tese);

        
        //Define o Modelo da JTable
        DefaultTableModel tbm = (DefaultTableModel)tblDefesa.getModel();         
        
        //Remove a Tabela Antiga
        for(int i = tbm.getRowCount()-1; i >= 0; i--){ 
            tbm.removeRow(i); 
        } 
        
        int i = 0; 
        //Preenche a Tabela Nova
        for(ExameBD df : listaQualficacao){            
            tbm.addRow(new String[1]); 
            tblDefesa.setValueAt(df.getCodigo(), i, 0); //Objeto Linha Coluna
            MetodosVerificacaoBD metBD = new MetodosVerificacaoBD();

            tblDefesa.setValueAt(metBD.convDataBra(df.getData().toString()), i, 1); 
            tblDefesa.setValueAt(df.getCod_banca(), i, 2);
            tblDefesa.setValueAt(df.getCod_tese(), i, 3);
            tblDefesa.setValueAt(df.getSituacao(), i, 4);
            i++; 
        }
        centralizarTable();
    }
    
    /*centralizar jTable*/
    private void centralizarTable(){
        DefaultTableCellRenderer center = new DefaultTableCellRenderer();
        center.setHorizontalAlignment(SwingConstants.CENTER ); 
        tblDefesa.getColumnModel().getColumn(1).setCellRenderer(center);  
    }
    
    public static void main(String args[]) {

        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(TelaDefesa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(TelaDefesa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(TelaDefesa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(TelaDefesa.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                TelaDefesa dialog = new TelaDefesa(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAlterar;
    private javax.swing.JButton btnCadastrar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnVoltar;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tblDefesa;
    // End of variables declaration//GEN-END:variables

}
